# ceph

#### Table of Contents

1. [Overview](#overview)
2. [Module Description - What the module does and why it is useful](#module-description)
3. [Setup - The basics of getting started with ceph](#setup)
    * [What ceph affects](#what-ceph-affects)
    * [Setup requirements](#setup-requirements)
    * [Beginning with ceph](#beginning-with-ceph)
4. [Usage - Configuration options and additional functionality](#usage)
5. [Reference - An under-the-hood peek at what the module is doing and how](#reference)
6. [Limitations - OS compatibility, etc.](#limitations)
7. [Development - Guide for contributing to the module](#development)
    * [Running tests](#running-tests)

## Overview

A one-maybe-two sentence summary of what the module does/what problem it solves. This is your 30 second elevator pitch for your module. Consider including OS/Puppet version it works with.       

## Module Description

If applicable, this section should have a brief description of the technology the module integrates with and what that integration enables. This section should answer the questions: "What does this module *do*?" and "Why would I use it?"

If your module has a range of functionality (installation, configuration, management, etc.) this is the time to mention it.

## Setup

### What ceph affects

* A list of files, packages, services, or operations that the module will alter, impact, or execute on the system it's installed on.
* This is a great place to stick any warnings.
* Can be in list or paragraph form. 

### Setup Requirements **OPTIONAL**

If your module requires anything extra before setting up (pluginsync enabled, etc.), mention it here. 

### Beginning with ceph

The very basic steps needed for a user to get the module up and running. 

If your most recent release breaks compatibility or requires particular steps for upgrading, you may wish to include an additional section here: Upgrading (For an example, see http://forge.puppetlabs.com/puppetlabs/firewall).

## Usage

Put the classes, types, and resources for customizing, configuring, and doing the fancy stuff with your module here. 

## Reference

Here, list the classes, types, providers, facts, etc contained in your module. This section should include all of the under-the-hood workings of your module so people know what the module is touching on their system but don't need to mess with things. (We are working on automating this section!)

### Classes

#### Public Classes
* `ceph`: Main class

#### Private Classes
* `ceph::params`: Manages ceph parameters.
* `ceph::install`: Manages ceph installation.
* `ceph::config`: Manages ceph configuration.
* `ceph::mon`: Ceph monitor setup.
* `ceph::osd`: Ceph OSD setup.

#### Resources
* `ceph::osd_disk`: Type to manage ceph osd disk. 

### Parameters

#### ceph
##### `package_name`
Name of ceph package.
##### `osd_disks`
OSD resource hash.
##### `fsid`
Cluster's FSID. Required.
##### `monitor_hosts`
Required.
##### `public_network`
Required.
##### `cluster_network`
Default: undef.
##### `mon_port`
Monitor port.
##### `auth_cluster_required`
##### `auth_service_required`
##### `auth_client_required`
##### `osd_journal_size`
##### `filestore_xattr_use_omap`
##### `osd_pool_default_size`
##### `osd_pool_default_min_size`
##### `osd_pool_default_pg_num`
##### `osd_pool_default_pgp_num`
##### `osd_crush_chooseleaf_type`
##### `is_admin`
Boolean if admin node. Default: false.
##### `is_mon`
Boolean if monitor node. Default: false.
##### `repo_url`
Ceph rpm repo baseurl.

## Limitations

This is where you list OS compatibility, version compatibility, etc.

## Development

### Running tests

Install gems for development and testing.
```
$ bundle install
```

Run rspec tests
```
$ bundle exec rake spec
```

Validate puppet syntax and puppet-lint
```
$ bundle exec rake validate
```

Run acceptance tests. This requires vagrant and virtualbox.
```
$ bundle exec rake acceptance
```
